/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package co.com.cliente.descubridor.vista;

import co.com.client.BaseView.CreateBase;
import co.com.cliente.Services;
import co.com.cliente.descubridor.estructura.DescubridorDS;
import co.com.cliente.descubridor.estructura.DescubridorRecord;
import co.com.entities.Descubridor;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.types.SelectionAppearance;
import com.smartgwt.client.types.SelectionStyle;
import com.smartgwt.client.util.BooleanCallback;
import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.Button;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import com.smartgwt.client.widgets.grid.events.RecordDoubleClickEvent;
import com.smartgwt.client.widgets.grid.events.RecordDoubleClickHandler;
import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.client.widgets.layout.VLayout;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author ias
 */
public class ConsultaDescubridor extends CreateBase {

    private HLayout accionesDescubridor;
    private Button btnEliminar, btnNuevo;
    private ListGrid usuariosGrid;

    public ConsultaDescubridor(final VLayout layout) {
        super("Consultar descubrimientos", "100%");

        btnEliminar = new Button("Eliminar");
        btnNuevo = new Button("Nuevo");

        accionesDescubridor = new HLayout();
        accionesDescubridor.setMargin(20);
        accionesDescubridor.setMembersMargin(20);
        accionesDescubridor.setHeight(50);
        accionesDescubridor.setWidth("100%");
        accionesDescubridor.setAlign(Alignment.CENTER);
        accionesDescubridor.setMembers(btnNuevo, btnEliminar);


        usuariosGrid = new ListGrid();
        usuariosGrid.setWidth100();
        usuariosGrid.setHeight100();
        usuariosGrid.setFields(DescubridorRecord.getFields());
        usuariosGrid.setEmptyMessage("No hay registros para mostrar");
        usuariosGrid.setSelectionType(SelectionStyle.SIMPLE);
        usuariosGrid.setSelectionAppearance(SelectionAppearance.CHECKBOX);
        usuariosGrid.setFilterOnKeypress(true);
        usuariosGrid.setShowFilterEditor(true);
        usuariosGrid.addRecordDoubleClickHandler(new RecordDoubleClickHandler() {

            public void onRecordDoubleClick(RecordDoubleClickEvent event) {
                Descubridor descubridor = event.getRecord().getAttributeAsObject("Descubridor")==null?null:(Descubridor) event.getRecord().getAttributeAsObject("Descubridor");
                if(descubridor!=null){
                    ActualizarAsteroide actualizarAsteroide = new ActualizarAsteroide(descubridor);
                }                
            }
        });
        

        btnEliminar.addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent event) {

                ListGridRecord[] selectedRecords = usuariosGrid.getSelection();
                final List<Descubridor> usuariosDelete = new ArrayList<Descubridor>(selectedRecords.length);


                for (ListGridRecord rec : selectedRecords) {
                    usuariosDelete.add((Descubridor) rec.getAttributeAsObject("Descubridor"));
                }
                if (usuariosDelete.isEmpty()) {

                    SC.warn("Debe seleccionar al menos un descubrimiento para poder eliminar");
                    return;
                } else {
                    SC.confirm("Confirmar Eliminación", "¿Esta seguro que desea eliminar los descubrimientos seleccionados?", new BooleanCallback() {
                        @Override
                        public void execute(Boolean value) {
                            if (value) {
                                AsyncCallback<Void> updateStateCallback = new AsyncCallback<Void>() {
                                    @Override
                                    public void onFailure(Throwable caught) {
                                        Logger.getLogger(getClass().getName()).log(Level.INFO, "Mensaje informativo... no se pudo actualizar el cliente debido a: " + caught.getMessage());
                                        SC.say("Eliminación de descubrimientos", caught.getMessage());
                                    }

                                    @Override
                                    public void onSuccess(Void result) {
                                        SC.say("Eliminación de descubrimientos", "Señor usuario, el(los) descubrimiento(s) se han eliminado correctamente");
                                        descubridoresLoad();
                                    }
                                };
                                Services.getDescubridoresServices().eliminarDescubridores(usuariosDelete, updateStateCallback);
                            }
                        }
                    });
                }
            }
        });
        
        btnNuevo.addClickHandler(new ClickHandler() {

            public void onClick(ClickEvent event) {
                CreacionDescubridor creacionDescubridor = new CreacionDescubridor();
                layout.removeMembers(layout.getMembers());
                layout.addMember(creacionDescubridor);
            }
        });

        AddActionBarItem(accionesDescubridor);
        AddFormContainerItem(usuariosGrid);
        descubridoresLoad();
    }

    private void clearResults() {
        for (ListGridRecord record : usuariosGrid.getRecords()) {
            usuariosGrid.removeData(record);
        }
    }

    private void descubridoresLoad() {
        Services.getDescubridoresServices().getDescubrimientos(new AsyncCallback<List<Descubridor>>() {
            public void onFailure(Throwable caught) {
                caught.getMessage();
            }

            public void onSuccess(List<Descubridor> result) {
                clearResults();
                for (int i = 0; i < result.size(); i++) {
                    usuariosGrid.addData(new DescubridorRecord(result.get(i)));
                }
            }
        });
    }
}
